﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalemShop.Forms
{
    public partial class FrmAddNewCustomer : Form
    {
        private ListViewItem customerItemView;
        private bool isEditMode = false;

        public FrmAddNewCustomer()
        {
            InitializeComponent();
            this.FormClosing += new FormClosingEventHandler(FrmAddNewCustomer_FormClosing);
        }

        public void FocusPoint()
        {
            txtPoint.Focus();
        }

        public bool EditMode
        {
            set
            {
                isEditMode = true;
                if (isEditMode)
                {
                    lbPoint.Text = "Điểm được cộng thêm";
                    txtPhone.Enabled = false;
                    this.Text = "Cộng điểm cho khách hàng";
                    txtPoint.Focus();
                }
                else
                {
                    lbPoint.Text = "Điểm tích lũy ban đầu";
                    txtPhone.Enabled = true;
                }
            }
            get { return isEditMode; }
        }

        private void FrmAddNewCustomer_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (DialogResult == DialogResult.Retry)
            {
                e.Cancel = true;
                return;
            }
        }

        private void btOk_Click(object sender, EventArgs e)
        {
            if (CheckUserData())
            {
                DialogResult = DialogResult.OK;
                string phone = FormatPhoneNum(txtPhone.Text);
                string name = txtCustomer.Text.ToUpper().Trim();
                string serial = "";
                if (!string.IsNullOrEmpty(txtSerial.Text))
                {
                    serial = txtSerial.Text.ToUpper().Trim();
                }

                if (isEditMode)
                {
                    if (customerItemView != null && customerItemView.Tag != null)
                    {
                        int cid = 0;
                        int.TryParse(customerItemView.Tag.ToString(), out cid);
                        if (DataManager.UpdateCustomer(cid, name, (int)txtPoint.Value, serial))
                        {
                            customerItemView.SubItems[0].Text = FrmCustomerExplorer.FormatCustomerName(name);
                            customerItemView.SubItems[1].Tag = name;
                            customerItemView.SubItems[3].Text = serial;
                            int point = 0;
                            int.TryParse(customerItemView.SubItems[2].Text, out point);
                            point = point + (int)txtPoint.Value;
                            customerItemView.SubItems[2].Text = point.ToString();
                            MessageBox.Show(this, string.Format("Tích {0} điểm cho khách hàng {1}", txtPoint.Value, txtCustomer.Text), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else
                {
                    long id = DataManager.AddNewCustomer(name, phone, (int)txtPoint.Value, serial);
                    if (id > 0)
                    {
                        customerItemView = new ListViewItem(new string[] {
                        FrmCustomerExplorer.FormatCustomerName(name),
                        phone,
                        txtPoint.Value.ToString("#,0"),
                        serial
                    });

                        customerItemView.SubItems[1].Tag = name;
                        customerItemView.Tag = id;
                        customerItemView.ImageIndex = 0;
                    }
                    else
                    {
                        customerItemView = null;
                    }
                }
            }
            else
            {
                DialogResult = DialogResult.Retry;
            }
        }

        public ListViewItem NewCustomerView
        {
            get { return customerItemView; }
            set
            {
                customerItemView = value;
                if (value != null)
                {
                    try
                    {
                        txtCustomer.Text = value.SubItems[1].Tag.ToString();
                        txtPhone.Text = value.SubItems[1].Text;
                        txtSerial.Text = value.SubItems[3].Text;
                        ActiveControl = txtPoint;
                    }
                    catch (Exception e) { }
                }
            }
        }

        private bool CheckUserData()
        {
            errorProvider1.Clear();
            if (string.IsNullOrEmpty(txtCustomer.Text))
            {
                errorProvider1.SetIconAlignment(txtCustomer, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(txtCustomer, "Tên khách hàng không được bỏ trống");
                return false;
            }

            if (string.IsNullOrEmpty(txtPhone.Text))
            {
                errorProvider1.SetIconAlignment(txtPhone, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(txtPhone, "Số điện thoại không được bỏ trống");
                return false;
            }

            if (txtPoint.Value == 0 && !isEditMode)
            {
                errorProvider1.SetIconAlignment(txtPoint, ErrorIconAlignment.MiddleLeft);
                errorProvider1.SetError(txtPoint, "Điểm tích lũy không được = 0");
                return false;
            }

            return true;
        }

        private string FormatPhoneNum(string phone)
        {
            if (phone.StartsWith("0"))
            {
                return phone.Substring(1);
            }

            return phone;
        }

        private void FrmAddNewCustomer_Load(object sender, EventArgs e)
        {
            if (isEditMode)
            {
                txtPoint.Focus();
            }
        }
    }
}
